//题目描述
//某小学最近得到了一笔赞助，打算拿出其中一部分为学习成绩优秀的前 5 名学生发奖学金。
//期末，每个学生都有 3 门课的成绩：语文、数学、英语。
//先按总分从高到低排序，如果两个同学总分相同，再按语文成绩从高到低排序，
//如果两个同学总分和语文成绩都相同，那么规定学号小的同学排在前面，这样，每个学生的排序是唯一确定的。
//任务：先根据输入的 3 门课的成绩计算总分，然后按上述规则排序，最后按排名顺序输出前五名名学生的学号和总分。
//注意，在前 5 名同学中，每个人的奖学金都不相同，因此，你必须严格按上述规则排序。
//例如，在某个正确答案中，如果前两行的输出数据（每行输出两个数：学号、总分) 是：
//7 279  
//5 279
//这两行数据的含义是：总分最高的两个同学的学号依次是 7 号、5 号。
//这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ，但学号为 7 的学生语文成绩更高一些。
//如果你的前两名的输出数据是：
//5 279  
//7 279
//则按输出错误处理，不能得分。
//
//输入格式
//共 n+1 行。
//第 1 行为一个正整数 n≤300，表示该校参加评选的学生人数。
//第 2 到 n+1 行，每行有 3 个用空格隔开的数字，每个数字都在 0 到 100 之间。
//第 j 行的 3 个数字依次表示学号为 j−1 的学生的语文、数学、英语的成绩。
//每个学生的学号按照输入顺序编号为 1∼n（恰好是输入数据的行号减 1）。
//保证所给的数据都是正确的，不必检验。
//
//输出格式
//共 5 行，每行是两个用空格隔开的正整数，依次表示前 5 名学生的学号和总分。
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 310;
struct Student{
	int chinese;
	int math;
	int english;
	int id;
	int all_score;
}stu[N];
bool cmp(Student a, Student b)
{
	if(a.all_score != b.all_score)  
		return a.all_score > b.all_score; //总分降序排列，总分大的靠前
	else{  //总分相同
		if(a.chinese != b.chinese)
			return a.chinese > b.chinese;  //语文成绩大的靠前
		else
			return a.id < b.id;  //总分、语文成绩都相同，序号小的靠前
	}
}
int main()
{
	int n = 0;
	cin >> n;
	for(int i = 1; i <= n; i++){
		scanf("%d%d%d",&stu[i].chinese,&stu[i].math,&stu[i].english);
		stu[i].id = i;
		stu[i].all_score = stu[i].chinese + stu[i].math + stu[i].english;
	}
	sort(stu + 1, stu + n + 1, cmp);  //数组从1开始使用，首地址加一
	for(int i = 1; i <= 5; i++){  //只需输出前五名
		cout << stu[i].id << " " << stu[i].all_score << endl;
	}
	return 0;
}
